/**
在TypeScript中，接口的继承特性允许一个接口可以扩展另一个接口，从而实现代码的复用和结构的清晰化。以下是关于接口继承特性的说明总结：
  1. 接口继承的基本概念
  - 接口可以通过使用  `extends`  关键字来继承其他接口。这意味着子接口可以拥有父接口的所有属性和方法，同时也可以添加新的属性和方法。

  2. 单继承
  - 一个接口可以继承一个父接口，获得其所有属性和方法。
  - 例如：
  interface Animal {
      name: string;
      eat(): void;
  }

  interface Dog extends Animal {
      bark(): void;  // Dog接口新增的方法
  }

  const myDog: Dog = {
      name: "旺财",
      eat() {
          console.log("狗在吃东西");
      },
      bark() {
          console.log("汪汪");
      }
  };
  3. 多继承
  - TypeScript的接口支持多继承，一个接口可以同时继承多个接口。
  - 例如：
  interface CanRun {
      run(): void;
  }

  interface CanBark {
      bark(): void;
  }

  interface Dog extends CanRun, CanBark {
      name: string;
  }

  const myDog: Dog = {
      name: "小白",
      run() {
          console.log("狗在跑");
      },
      bark() {
          console.log("汪汪");
      }
  };
  4. 继承的属性冲突
  - 如果多个父接口中有同名属性，子接口必须提供该属性的具体实现。
  - 例如：
  interface A {
      name: string;
  }

  interface B {
      name: number;
  }

  interface C extends A, B {
      age: number;  // C接口需要实现name属性
  }

  const obj: C = {
      name: 123,  // 此处需要注意类型一致性
      age: 30,
  };
  5. 实现接口的类
  - 类可以实现一个或多个接口，类需要提供接口中定义的所有属性和方法的实现。
  - 例如：
  class Labrador implements Dog {
      name: string;
      constructor(name: string) {
          this.name = name;
      }
      
      eat() {
          console.log(`${this.name} 在吃东西`);
      }
      
      bark() {
          console.log(`${this.name} 汪汪叫`);
      }
  }

  const myLab = new Labrador("小黑");
  myLab.eat();  // 输出：小黑 在吃东西
  myLab.bark(); // 输出：小黑 汪汪叫
  6. 总结
  接口的继承特性使得TypeScript能够创建灵活且可扩展的类型系统。通过继承，开发者可以构建出更复杂的类型结构，增强代码的复用性和可维护性。这种特性尤其适用于大型项目中，能够帮助组织和管理复杂的类型定义。
 */
interface IPerson {
  name: string
  age: number
}

// 可以从其他的接口中继承过来属性
// 1.减少了相同代码的重复编写
// 2.如果使用第三库, 给我们定义了一些属性
//  > 自定义一个接口, 同时你希望自定义接口拥有第三方某一个类型中所有的属性
//  > 可以使用继承来完成
interface IStudent extends IPerson {
  slody: string
}

const student: IStudent = {
  name: 'extends-name',
  age: 18,
  slody: '123'
}


export {}
